package com.demo.web_06;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//定义过滤器：
//7. 注意事项 过滤器用来设置编码格式和用户校验
//调用顺序：确保过滤器的配置顺序正确，以避免逻辑冲突。
//异常处理：在 doFilter 方法中进行适当的异常处理，以确保过滤器链的稳定性。
//性能考虑：避免在 doFilter 方法中执行耗时操作，以提高响应速度。
//过滤器链中的过滤器按配置的顺序依次处理请求和响应。每个过滤器可以选择是否调用 chain.doFilter(request, response) 来继续处理请求，或者直接返回响应。
public class Myfilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 获取初始化参数
        String name = filterConfig.getInitParameter("name");
        // 输出初始化参数
        System.out.println("姓名: " + name);
    }
    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        // 在访问的时候执行
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        System.out.println("======= 开始执行doFilter ========");
        /* 转发到下一个组件，进行后续的处理（组件可以是一个过滤器，也可以是一个servlet）
         */
        servletRequest.setCharacterEncoding("UTF-8");
//        servletResponse.setCharacterEncoding("UTF-8");
//        servletResponse.setContentType("application/pdf");
//        httpResponse.setHeader("content-type", "application/pdf");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("======= 结束执行doFilter ========");
    }

    @Override
    public void destroy() {

    }
}